
class FormacaoController {

    Integer total = 0;

    /*
     * Se a url vier sem action redireciona para a create.
     */
    def index  = {
        redirect(action: "create");
    };

    /*
     * Closure que carrega a tela de cadastro.
     */
    def create = {
        if(!verificaLogon()){
            return;
        }
        def formacaoInstance = new Formacao();
        // Busca as formações cadastradas.
        def formacaoInstanceList = Formacao.findAllByEstagiario(session.pessoa);
        if(formacaoInstanceList){
            total = formacaoInstanceList.count();
        }
        return [formacaoInstance: formacaoInstance,
                formacaoInstanceList: formacaoInstanceList,
                formacaoInstanceTotal: total];
    }

    /*
     * Closure que grava o registro.
     */
    def save   = {
        if(!verificaLogon()){
            return;
        }
        def formacaoInstance = new Formacao(params);
        // Busca as formaçãões cadastradas.
        def formacaoInstanceList = Formacao.findAllByEstagiario(session.pessoa);
        // Quantidade registros.
        if(formacaoInstanceList){
            total = formacaoInstanceList.count();
        }
        //grava o registro
        if (formacaoInstance.save(flush: true)) {
            flash.message = "Formação cadastrada com sucesso!";
            redirect(action: "create");
        }else {
            render(view:"create",model: [formacaoInstance: formacaoInstance, 
                                         formacaoInstanceList: formacaoInstanceList,
                                         formacaoInstanceTotal:total]);
        }
    };

    /*
     * Closure que carrega a tela de edição de cadastro.
     */
    def edit   = {
        if(!verificaLogon()){
            return;
        }
        def formacaoInstance = Formacao.findById(params.id);
        // Busca as formações cadastradas.
        def formacaoInstanceList = Formacao.findAllByEstagiario(session.pessoa);
        // Quantidade para a paginação.
        if(formacaoInstanceList){
            total = formacaoInstanceList.count();
        }
        if (formacaoInstance){
            return [formacaoInstance : formacaoInstance,
                    formacaoInstanceList: formacaoInstanceList,
                    formacaoInstanceTotal: total];
        }else {
            flash.message="Formação não encontrada.";
            redirect(action:'create');
        }
    };

    /*
     * Closure que grava as alterações do registro.
     */
    def update   = {
        if(!verificaLogon()){
            return;
        }
        def formacaoInstance = Formacao.get(params.id)
        formacaoInstance.properties = params
        // Busca as formações cadastradas.
        def formacaoInstanceList = Formacao.findAllByEstagiario(session.pessoa);
        // Quantidade para a paginação.
        println(formacaoInstance);
        if(formacaoInstanceList){
            total = formacaoInstanceList.count();
        }
        //grava as alterações
        if(formacaoInstance.save()){
            flash.message = "Dados alterados com Sucesso!";
            redirect(action: "create");
        }else {
            render(view:"edit",model: [formacaoInstance: formacaoInstance,
                                       formacaoInstanceList: formacaoInstanceList,
                                       formacaoInstanceTotal: total]);
        }
    };

    /*
     * Closure que exclui os registros.
     */
    def delete = {
        if(!verificaLogon()){
            return;
        }
        def formacaoInstance = Formacao.findById(params.id)
        //exclui o registro
        if(formacaoInstance.delete()){
            flash.message = "Formaçao excluida com sucesso.";
            redirect(action: "create");
        }else{
            flash.message = "Não foi possível excluir a formação.";
            redirect(action: "create");
        }
    };

    /*
     * Método que verifica se o usuário está logado.
     * Se não estiver logado é redirecionado para home
     */
    private boolean verificaLogon() {
        if(!session["pessoa"]){
            flash.message = "Você precisa estar logado para acessar esta página.";
            redirect(controller:'login', action:'auth');
            return false;
        }

        return true;
    }

}
